
/*
 * Copyright (c) 2022 Huawei Device Co., Ltd.
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *     http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */
export var TYPE;
(function (TYPE) {
    /**
     * Raw text
     */
    TYPE[TYPE["literal"] = 0] = "literal";
    /**
     * Variable w/o any format, e.g `var` in `this is a {var}`
     */
    TYPE[TYPE["argument"] = 1] = "argument";
    /**
     * Variable w/ number format
     */
    TYPE[TYPE["number"] = 2] = "number";
    /**
     * Variable w/ date format
     */
    TYPE[TYPE["date"] = 3] = "date";
    /**
     * Variable w/ time format
     */
    TYPE[TYPE["time"] = 4] = "time";
    /**
     * Variable w/ select format
     */
    TYPE[TYPE["select"] = 5] = "select";
    /**
     * Variable w/ plural format
     */
    TYPE[TYPE["plural"] = 6] = "plural";
    /**
     * Only possible within plural argument.
     * This is the `#` symbol that will be substituted with the count.
     */
    TYPE[TYPE["pound"] = 7] = "pound";
    /**
     * XML-like tag
     */
    TYPE[TYPE["tag"] = 8] = "tag";
})(TYPE || (TYPE = {}));

export var SKELETON_TYPE;
(function (SKELETON_TYPE) {
    SKELETON_TYPE[SKELETON_TYPE["number"] = 0] = "number";
    SKELETON_TYPE[SKELETON_TYPE["dateTime"] = 1] = "dateTime";
})(SKELETON_TYPE || (SKELETON_TYPE = {}));

/**
 * Type Guards
 */
export function isLiteralElement(el) {
    return el.type === TYPE.literal;
}
export function isArgumentElement(el) {
    return el.type === TYPE.argument;
}
export function isNumberElement(el) {
    return el.type === TYPE.number;
}
export function isDateElement(el) {
    return el.type === TYPE.date;
}
export function isTimeElement(el) {
    return el.type === TYPE.time;
}
export function isSelectElement(el) {
    return el.type === TYPE.select;
}
export function isPluralElement(el) {
    return el.type === TYPE.plural;
}
export function isPoundElement(el) {
    return el.type === TYPE.pound;
}
export function isTagElement(el) {
    return el.type === TYPE.tag;
}
export function isNumberSkeleton(el) {
    return !!(el && typeof el === 'object' && el.type === 0 /* SKELETON_TYPE.number */);
}
export function isDateTimeSkeleton(el) {
    return !!(el && typeof el === 'object' && el.type === 1 /* SKELETON_TYPE.dateTime */);
}
export function createLiteralElement(value) {
    return {
        type: TYPE.literal,
        value,
    };
}
export function createNumberElement(value, style) {
    return {
        type: TYPE.number,
        value,
        style,
    };
}


